-- 553.lua
-- Created by chendh Dec/02/2015
-- 梦魇幼龙BUFF光效

return {
    onTransform = function(monster)
        -- 龙蛋变身成梦魇幼龙时，"梦魇巨龙"播放 "攻击增益" 光效

        -- 当前关卡
        local uiCurLevel = UIDungeonMgr.getCurLevel();

        -- 当前怪物的基类ID
        local baseClassId = monster:query("base_class_id");

        -- 幼龙位置
        local dragonPos = {};
        local openMonsterGrids = UIDungeonMgr:getCurLevel():getOpenMonsterGrids();
        for i = 1, #openMonsterGrids do
            local monsterGrid = openMonsterGrids[i];
            local monster = monsterGrid.gridData.monster;
            if monster:query("base_class_id") == baseClassId and not monster:isDead() then
                table.insert(dragonPos, monster:getPos());
            end
        end
        
        -- 判断是否需要播放光效
        -- 由于可能存在2个龙蛋同时孵化，回调中无法判断是不是第一只梦魇幼龙出现
        -- 先用比较恶心的做法，根据孵化规则判断
        local needPlay = false;
        local count = #dragonPos
        if count == 1 then
            -- 只有一只幼龙，必定是刚孵化的
            needPlay = true;
        elseif count == 2 and dragonPos[1] + 4 == dragonPos[2] then
            -- 有两只幼龙，如果在同一行最左和最右就是同时孵化的
            -- 每次最多孵化2只，大于2只不考虑
            needPlay = true;
        end
        
        -- 第一次出现梦魇幼龙时，梦魇巨龙播放攻击增益光效
        if needPlay then
            for i = 1, #openMonsterGrids do
                local monsterGrid = openMonsterGrids[i];
                local monster = monsterGrid.gridData.monster;
                if monster:query("base_class_id") == 511 and not monster:isDead() then
                    playAddBuffEffect(monsterGrid, BUFF_TYPE_ATTACK);
                    break;
                end
            end
        end
    end,

    onDie = function(monster)
        -- 当所有幼龙都死亡时，"梦魇巨龙"播放 "攻击降低" 光效
        local uiCurLevel = UIDungeonMgr.getCurLevel();

        -- 当前怪物的基类ID
        local baseClassId = monster:query("base_class_id");

        -- 获取所有幼龙
        local isAllDie = true;
        local openMonsterGrids = UIDungeonMgr:getCurLevel():getOpenMonsterGrids();
        for i = 1, #openMonsterGrids do
            local monsterGrid = openMonsterGrids[i];
            local monster = monsterGrid.gridData.monster;
            if monster:query("base_class_id") == baseClassId and not monster:isDead() then
                isAllDie = false;
                break;
            end
        end

        -- 幼龙全死了，播放光效
        if isAllDie then
            for i = 1, #openMonsterGrids do
                local monsterGrid = openMonsterGrids[i];
                local monster = monsterGrid.gridData.monster;
                if monster:query("base_class_id") == 511 and not monster:isDead() then
                    playAddBuffEffect(monsterGrid, DEBUFF_TYPE_ATTACK);
                    break;
                end
            end
        end
    end,
};